package com.person.monitor.location;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.SystemClock;

import com.baidu.location.BDAbstractLocationListener;
import com.baidu.location.BDLocation;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.Poi;
import com.baidu.location.PoiRegion;
import com.person.monitor.MyLog;

public class BaiduLocation extends BaseLocation{
    LocationClient client;

    public BaiduLocation(Context activity) {
        super(activity);
        try {
            LocationClient.setAgreePrivacy(true);

            client = new LocationClient(activity.getApplicationContext());
            client.setLocOption(getDefaultLocationClientOption());
            client.registerLocationListener(mListener);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }

    @Override
    public void startLocation() {
        client.start();
    }

    @Override
    public void stopLocation() {
        client.stop();
    }
    LocationClientOption mOption;
    public LocationClientOption getDefaultLocationClientOption() {
        if(mOption == null) {
            mOption = new LocationClientOption();

            mOption.setCoorType("gcj02"); // 可选，默认gcj02，设置返回的定位结果坐标系，如果配合百度地图使用，建议设置为bd09ll;
            mOption.setScanSpan(5*1000); // 可选，默认0，即仅定位一次，设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
            mOption.setIsNeedAddress(false); // 可选，设置是否需要地址信息，默认不需要
            mOption.setIsNeedLocationDescribe(false); // 可选，设置是否需要地址描述
            mOption.setNeedDeviceDirect(false); // 可选，设置是否需要设备方向结果
            mOption.setLocationNotify(false); // 可选，默认false，设置是否当gps有效时按照1S1次频率输出GPS结果
            mOption.setIgnoreKillProcess(true); // 可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop
            mOption.setIsNeedLocationDescribe(false); // 可选，默认false，设置是否需要位置语义化结果，可以在BDLocation
            mOption.setIsNeedLocationPoiList(false); // 可选，默认false，设置是否需要POI结果，可以在BDLocation
            mOption.SetIgnoreCacheException(false); // 可选，默认false，设置是否收集CRASH信息，默认收集
            mOption.setLocationMode(LocationClientOption.LocationMode.Battery_Saving); // 可选，默认高精度，设置定位模式，高精度，低功耗，仅设备，模糊
            mOption.setIsNeedAltitude(false); // 可选，默认false，设置定位时是否需要海拔信息，默认不需要，除基础定位版本都可用
            mOption.setFirstLocType(LocationClientOption.FirstLocType.SPEED_IN_FIRST_LOC); // 可选，设置首次定位时选择定位速度优先还是定位准确性优先，默认为速度优先
        }
        return mOption;
    }

    private BDAbstractLocationListener mListener = new BDAbstractLocationListener() {

        /**
         * 定位请求回调函数
         * @param location 定位结果
         */
        @Override
        public void onReceiveLocation(BDLocation location) {

            if (location != null) {
                MyLog.D("onReceiveLocation getLocType="+location.getLocType());
                if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
                    locationSuccess(location.getLatitude(), location.getLongitude(), null);
                } else {
                    locationFail("location type error, getLocType()=" + location.getLocType());
                }
            } else {
                MyLog.E("onReceiveLocation location is null");
                locationFail("location is null");
            }
        }

    };
}
